//引入axios工具
import axios from 'axios'
import Router from '@/router'
import constants from '@/constant'
import common from "@/utils/common";
import store from "@/store";

/**
 * 该文件用于处理请求
 */

const service = axios.create({
  baseURL: "/api", // url = base url + request url
  //baseURL就是vue项目发送请求到那个域名的地址，设置基础URL，给请求路径加上这段，这个URL会和请求的URL拼接，形成完整的请求URL。
  //每一个从浏览器发送的请求会先发送到："http://localhost:vue项目监听的端口号/api/URL资源"
  //然后vue项目接收到请求后会将这个请求进行处理然后再代理发送到到对应的后端服务器上
  withCredentials: true,
  timeout: 500000
})

// axios请求拦截器,给发出去的请求添加请求头
service.interceptors.request.use(
  config => {
    let token = store.state.JwtToken;
    if (!common.isEmpty(token)) {
      config.headers[constants.HeaderTokenKey] = token;
      config.headers['role'] = store.state.role;
    }
    return config;
  },
  error => {
    console.log(error)
    return Promise.reject(error)
  }
)

//axios响应拦截器
service.interceptors.response.use(res => {
    if (res.data.code === 0 && res.data.msg === 'NOT_LOGIN') {// 返回登录页面
      console.log('未登录,或者登录失效, 直接跳转至登录页面');
      //移除令牌信息
      this.$store.commit("removeJwtToken");
      // 移除用户信息
      this.$store.commit("loadCurrentUser", {});

      //重定向到用户登录界面
      Router.replace('/login');

      return Promise.reject(res); // 这里使用 Promise.reject() 以中断原始请求链
    } else {
      return res;
    }
  },
  error => {
    console.log('错误' + error)
    let {message} = error;
    if (message == "Network Error") {
      message = "后端接口连接异常";
    } else if (message.includes("timeout")) {
      message = "系统接口请求超时";
    } else if (message.includes("Request failed with status code")) {
      message = "系统接口" + message.substr(message.length - 3) + "异常";
    }

    return Promise.reject(error)

  })

export default service
